Different codes can be used to encode data to achieve different results. One class of codes, called constrained codes, can be used to eliminate undesirable data patterns. A particular type of constrained code, called a Maximum Transition Run (MTR) code, can be used to guarantee a maximum number of transition spacing. MTR codes are widely used in a number of channels such as non-volatile storage drives, hard disk drives, and digital optical discs, to prevent long stretches of consecutive transitions, thus enhancing reliability.
Another class of codes, called error correction codes (ECC), may be used to detect and/or correct errors. Error correction codes are often used to correct errors that may occur during transmission or storage. Errors may occur for a number of reasons, including, for example, noise or interference, scratches on a physical storage medium, and/or other reasons. One type of ECC is known as a low density parity check (LDPC) code. An LDPC encoder receives original data and produces redundant or parity data based on the original data using a parity-check matrix H. The combination of the original data and the parity data is called an LDPC codeword. An LDPC codeword can be stored and/or communicated, during which errors may occur in the codeword, as described above. An LDPC decoder can process an erroneous version of an LDPC codeword to attempt to correct the errors and recover the original data.
In some applications, it may be advantageous to generate codewords using both a constrained code and an error correcting code. It is however, hard to generate codewords that are both constrained and error correcting. Existing systems attempt to approximately accomplish this goal using two common approaches.
The first approach uses two constrained encoding/decoding operations. According to this first approach, user data is encoded with a first constrained encoding operation to generate constrained data. The constrained data is then encoded with an ECC encoder to generate parity information. However, because the parity information might not satisfy the constrained code conditions, the parity information is encoded with a second constrained encoder operation. The second constrained code operation typically has a much lower code rate than the first constrained code operation. This is because, on the decoder side, the constrained parity information needs to be decoded prior to being corrected by the ECC decoder. Consequently, in an attempt to limit error propagation for the constrained parity information, low-rate codes are used. The drawback of this approach is therefore that a constrained decoder must first decode the transmitted data, and the constrained decoder typically either has a low rate or propagates errors.
Another common approach for combining constrained codes and ECC is to interleave ECC parity among constrained data. This approach typically constructs a codeword by separately generating constrained data and parity information from the same user data, and then interleaving the parity information among the constrained data. Although this approach has the advantage of running the ECC decoder first, which limits error propagation, it has the drawback that portions of the transmitted data may not be constrained.
The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the inventors hereof, to the extent the work is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.